Technologies for managing network statistic counters

ABSTRACT

Technologies for managing network statistic counters include a network interface controller (NIC) of a computing device configured to identify a statistic counter of and a software consumer associated with a received network packet and identify an active counter page as a function of the identified software consumer. The NIC is further configured to read a value of the statistic counter stored at a counter memory address of a corresponding counter identifier entry of the identified active counter page, increment a read value of the statistic counter, and write the incremented value of the statistic counter back to the counter memory address. Additionally, in response to detecting a notification triggering event, generating a notification message that includes a present value of the statistic counter and a present value of each of the other statistic counters of the active counter page, and transmit the generated notification message to the software consumer. Other embodiments are described herein.

CROSS-REFERENCE TO RELATED APPLICATIONS

The present application claims the benefit of U.S. Provisional PatentApplication No. 62/427,268, filed Nov. 29, 2016 and Indian ProvisionalPatent Application No. 201741030632, filed Aug. 30, 2017.

BACKGROUND

In present packet-switched network architectures, data is transmitted inthe form of network packets between networked computing devices. At ahigh level, data is collected and packetized into a network packet,which is then sent to a transmission device (e.g., a network interfacecontroller (NIC) of the respective networked computing device)responsible for dispatching the network packet to a target computingdevice over a network. Some such networked computing devices maintainstatistics of the network traffic received by and/or transmitted fromthe computing device via a number of network statistic counters. Forexample, the network statistic counters can be used to track the numberof arrivals of a particular network packet type, event, or flow. Assuch, the value of the statistic counters can be used to monitorperformance and/or security of the computing device, as well asinfluence network management and network traffic engineering decisions.

Typically, network statistic counters are implemented via on-die memoryand maintained by hardware. Generally, to obtain the counter values, asoftware application polls the statistic counters via a register read.However, certain deployment environments, such as those deploymentenvironments in which millions of statistic counters may be required,can result in a large die size, which may effectively render the designunscalable.

BRIEF DESCRIPTION OF THE DRAWINGS

The concepts described herein are illustrated by way of example and notby way of limitation in the accompanying figures. For simplicity andclarity of illustration, elements illustrated in the figures are notnecessarily drawn to scale. Where considered appropriate, referencelabels have been repeated among the figures to indicate corresponding oranalogous elements.

FIG. 1 is a diagram of a conceptual overview of a data center in whichone or more techniques described herein may be implemented according tovarious embodiments;

FIG. 2 is a diagram of an example embodiment of a logical configurationof a rack of the data center of FIG. 1;

FIG. 3 is a diagram of an example embodiment of another data center inwhich one or more techniques described herein may be implementedaccording to various embodiments;

FIG. 4 is a diagram of another example embodiment of a data center inwhich one or more techniques described herein may be implementedaccording to various embodiments;

FIG. 5 is a diagram of a connectivity scheme representative oflink-layer connectivity that may be established among various sleds ofthe data centers of FIGS. 1, 3, and 4;

FIG. 6 is a diagram of a rack architecture that may be representative ofan architecture of any particular one of the racks depicted in FIGS. 1-4according to some embodiments;

FIG. 7 is a diagram of an example embodiment of a sled that may be usedwith the rack architecture of FIG. 6;

FIG. 8 is a diagram of an example embodiment of a rack architecture toprovide support for sleds featuring expansion capabilities;

FIG. 9 is a diagram of an example embodiment of a rack implementedaccording to the rack architecture of FIG. 8;

FIG. 10 is a diagram of an example embodiment of a sled designed for usein conjunction with the rack of FIG. 9;

FIG. 11 is a diagram of an example embodiment of a data center in whichone or more techniques described herein may be implemented according tovarious embodiments;

FIG. 12 is a simplified block diagram of at least one embodiment of asystem for managing network statistic counters that includes a sourcecomputing device communicatively coupled with a target computing devicevia a network;

FIG. 13 is a simplified block diagram of at least one embodiment of atarget computing device of the system of FIG. 12;

FIG. 14 is a simplified block diagram of at least one embodiment of anenvironment of the target computing device of FIGS. 12 and 13;

FIG. 15 is a simplified flow diagram of at least one embodiment of amethod for updating a network statistic counter associated with areceived network packet that may be executed by the target computingdevice of FIGS. 12-14;

FIG. 16 is a simplified flow diagram of at least one embodiment of amethod for notifying a software consumer of the present values of one ormore network statistic counter(s) to which the software consumer hassubscribed that may be executed by the target computing device of FIGS.12-14; and

FIG. 17 is a simplified block diagram of a high-level architecture ofnetwork statistic counters in a memory of the target computing device ofFIGS. 12-14 usable to perform a counter value lookup.

DETAILED DESCRIPTION OF THE DRAWINGS

While the concepts of the present disclosure are susceptible to variousmodifications and alternative forms, specific embodiments thereof havebeen shown by way of example in the drawings and will be describedherein in detail. It should be understood, however, that there is nointent to limit the concepts of the present disclosure to the particularforms disclosed, but on the contrary, the intention is to cover allmodifications, equivalents, and alternatives consistent with the presentdisclosure and the appended claims.

References in the specification to “one embodiment,” “an embodiment,”“an illustrative embodiment,” etc., indicate that the embodimentdescribed may include a particular feature, structure, orcharacteristic, but every embodiment may or may not necessarily includethat particular feature, structure, or characteristic. Moreover, suchphrases are not necessarily referring to the same embodiment. Further,when a particular feature, structure, or characteristic is described inconnection with an embodiment, it is submitted that it is within theknowledge of one skilled in the art to effect such feature, structure,or characteristic in connection with other embodiments whether or notexplicitly described. Additionally, it should be appreciated that itemsincluded in a list in the form of “at least one A, B, and C” can mean(A); (B); (C); (A and B); (A and C); (B and C); or (A, B, and C).Similarly, items listed in the form of “at least one of A, B, or C” canmean (A); (B); (C); (A and B); (A and C); (B and C); or (A, B, and C).

The disclosed embodiments may be implemented, in some cases, inhardware, firmware, software, or any combination thereof. The disclosedembodiments may also be implemented as instructions carried by or storedon a transitory or non-transitory machine-readable (e.g.,computer-readable) storage medium, which may be read and executed by oneor more processors. A machine-readable storage medium may be embodied asany storage device, mechanism, or other physical structure for storingor transmitting information in a form readable by a machine (e.g., avolatile or non-volatile memory, a media disc, or other media device).

In the drawings, some structural or method features may be shown inspecific arrangements and/or orderings. However, it should beappreciated that such specific arrangements and/or orderings may not berequired. Rather, in some embodiments, such features may be arranged ina different manner and/or order than shown in the illustrative figures.Additionally, the inclusion of a structural or method feature in aparticular figure is not meant to imply that such feature is required inall embodiments and, in some embodiments, may not be included or may becombined with other features.

FIG. 1 illustrates a conceptual overview of a data center 100 that maygenerally be representative of a data center or other type of computingnetwork in/for which one or more techniques described herein may beimplemented according to various embodiments. As shown in FIG. 1, datacenter 100 may generally contain a plurality of racks, each of which mayhouse computing equipment comprising a respective set of physicalresources. In the particular non-limiting example depicted in FIG. 1,data center 100 contains four racks 102A to 102D, which house computingequipment comprising respective sets of physical resources (PCRs) 105Ato 105D. According to this example, a collective set of physicalresources 106 of data center 100 includes the various sets of physicalresources 105A to 105D that are distributed among racks 102A to 102D.Physical resources 106 may include resources of multiple types, suchas—for example—processors, co-processors, accelerators, fieldprogrammable gate arrays (FPGAs), memory, and storage. The embodimentsare not limited to these examples.

The illustrative data center 100 differs from typical data centers inmany ways. For example, in the illustrative embodiment, the circuitboards (“sleds”) on which components such as CPUs, memory, and othercomponents are placed are designed for increased thermal performance Inparticular, in the illustrative embodiment, the sleds are shallower thantypical boards. In other words, the sleds are shorter from the front tothe back, where cooling fans are located. This decreases the length ofthe path that air must to travel across the components on the board.Further, the components on the sled are spaced further apart than intypical circuit boards, and the components are arranged to reduce oreliminate shadowing (i.e., one component in the air flow path of anothercomponent). In the illustrative embodiment, processing components suchas the processors are located on a top side of a sled while near memory,such as DIMMs, are located on a bottom side of the sled. As a result ofthe enhanced airflow provided by this design, the components may operateat higher frequencies and power levels than in typical systems, therebyincreasing performance. Furthermore, the sleds are configured to blindlymate with power and data communication cables in each rack 102A, 102B,102C, 102D, enhancing their ability to be quickly removed, upgraded,reinstalled, and/or replaced. Similarly, individual components locatedon the sleds, such as processors, accelerators, memory, and data storagedrives, are configured to be easily upgraded due to their increasedspacing from each other. In the illustrative embodiment, the componentsadditionally include hardware attestation features to prove theirauthenticity.

Furthermore, in the illustrative embodiment, the data center 100utilizes a single network architecture (“fabric”) that supports multipleother network architectures including Ethernet and Omni-Path. The sleds,in the illustrative embodiment, are coupled to switches via opticalfibers, which provide higher bandwidth and lower latency than typicaltwisted pair cabling (e.g., Category 5, Category 5 e, Category 6, etc.).Due to the high bandwidth, low latency interconnections and networkarchitecture, the data center 100 may, in use, pool resources, such asmemory, accelerators (e.g., graphics accelerators, FPGAs, ASICs, etc.),and data storage drives that are physically disaggregated, and providethem to compute resources (e.g., processors) on an as needed basis,enabling the compute resources to access the pooled resources as if theywere local. The illustrative data center 100 additionally receivesutilization information for the various resources, predicts resourceutilization for different types of workloads based on past resourceutilization, and dynamically reallocates the resources based on thisinformation.

The racks 102A, 102B, 102C, 102D of the data center 100 may includephysical design features that facilitate the automation of a variety oftypes of maintenance tasks. For example, data center 100 may beimplemented using racks that are designed to be robotically-accessed,and to accept and house robotically-manipulatable resource sleds.Furthermore, in the illustrative embodiment, the racks 102A, 102B, 102C,102D include integrated power sources that receive a greater voltagethan is typical for power sources. The increased voltage enables thepower sources to provide additional power to the components on eachsled, enabling the components to operate at higher than typicalfrequencies.

FIG. 2 illustrates an exemplary logical configuration of a rack 202 ofthe data center 100. As shown in FIG. 2, rack 202 may generally house aplurality of sleds, each of which may comprise a respective set ofphysical resources. In the particular non-limiting example depicted inFIG. 2, rack 202 houses sleds 204-1 to 204-4 comprising respective setsof physical resources 205-1 to 205-4, each of which constitutes aportion of the collective set of physical resources 206 comprised inrack 202. With respect to FIG. 1, if rack 202 is representative of—forexample—rack 102A, then physical resources 206 may correspond to thephysical resources 105A comprised in rack 102A. In the context of thisexample, physical resources 105A may thus be made up of the respectivesets of physical resources, including physical storage resources 205-1,physical accelerator resources 205-2, physical memory resources 205-3,and physical compute resources 205-5 comprised in the sleds 204-1 to204-4 of rack 202. The embodiments are not limited to this example. Eachsled may contain a pool of each of the various types of physicalresources (e.g., compute, memory, accelerator, storage). By havingrobotically accessible and robotically manipulatable sleds comprisingdisaggregated resources, each type of resource can be upgradedindependently of each other and at their own optimized refresh rate.

FIG. 3 illustrates an example of a data center 300 that may generally berepresentative of one in/for which one or more techniques describedherein may be implemented according to various embodiments. In theparticular non-limiting example depicted in FIG. 3, data center 300comprises racks 302-1 to 302-32. In various embodiments, the racks ofdata center 300 may be arranged in such fashion as to define and/oraccommodate various access pathways. For example, as shown in FIG. 3,the racks of data center 300 may be arranged in such fashion as todefine and/or accommodate access pathways 311A, 311B, 311C, and 311D. Insome embodiments, the presence of such access pathways may generallyenable automated maintenance equipment, such as robotic maintenanceequipment, to physically access the computing equipment housed in thevarious racks of data center 300 and perform automated maintenance tasks(e.g., replace a failed sled, upgrade a sled). In various embodiments,the dimensions of access pathways 311A, 311B, 311C, and 311D, thedimensions of racks 302-1 to 302-32, and/or one or more other aspects ofthe physical layout of data center 300 may be selected to facilitatesuch automated operations. The embodiments are not limited in thiscontext.

FIG. 4 illustrates an example of a data center 400 that may generally berepresentative of one in/for which one or more techniques describedherein may be implemented according to various embodiments. As shown inFIG. 4, data center 400 may feature an optical fabric 412. Opticalfabric 412 may generally comprise a combination of optical signalingmedia (such as optical cabling) and optical switching infrastructure viawhich any particular sled in data center 400 can send signals to (andreceive signals from) each of the other sleds in data center 400. Thesignaling connectivity that optical fabric 412 provides to any givensled may include connectivity both to other sleds in a same rack andsleds in other racks. In the particular non-limiting example depicted inFIG. 4, data center 400 includes four racks 402A to 402D. Racks 402A to402D house respective pairs of sleds 404A-1 and 404A-2, 404B-1 and404B-2, 404C-1 and 404C-2, and 404D-1 and 404D-2. Thus, in this example,data center 400 comprises a total of eight sleds. Via optical fabric412, each such sled may possess signaling connectivity with each of theseven other sleds in data center 400. For example, via optical fabric412, sled 404A-1 in rack 402A may possess signaling connectivity withsled 404A-2 in rack 402A, as well as the six other sleds 404B-1, 404B-2,404C-1, 404C-2, 404D-1, and 404D-2 that are distributed among the otherracks 402B, 402C, and 402D of data center 400. The embodiments are notlimited to this example.

FIG. 5 illustrates an overview of a connectivity scheme 500 that maygenerally be representative of link-layer connectivity that may beestablished in some embodiments among the various sleds of a datacenter, such as any of example data centers 100, 300, and 400 of FIGS.1, 3, and 4. Connectivity scheme 500 may be implemented using an opticalfabric that features a dual-mode optical switching infrastructure 514.Dual-mode optical switching infrastructure 514 may generally comprise aswitching infrastructure that is capable of receiving communicationsaccording to multiple link-layer protocols via a same unified set ofoptical signaling media, and properly switching such communications. Invarious embodiments, dual-mode optical switching infrastructure 514 maybe implemented using one or more dual-mode optical switches 515. Invarious embodiments, dual-mode optical switches 515 may generallycomprise high-radix switches. In some embodiments, dual-mode opticalswitches 515 may comprise multi-ply switches, such as four-ply switches.In various embodiments, dual-mode optical switches 515 may featureintegrated silicon photonics that enable them to switch communicationswith significantly reduced latency in comparison to conventionalswitching devices. In some embodiments, dual-mode optical switches 515may constitute leaf switches 530 in a leaf-spine architectureadditionally including one or more dual-mode optical spine switches 520.

In various embodiments, dual-mode optical switches may be capable ofreceiving both Ethernet protocol communications carrying InternetProtocol (IP packets) and communications according to a second,high-performance computing (HPC) link-layer protocol (e.g., Intel'sOmni-Path Architecture's, Infiniband) via optical signaling media of anoptical fabric. As reflected in FIG. 5, with respect to any particularpair of sleds 504A and 504B possessing optical signaling connectivity tothe optical fabric, connectivity scheme 500 may thus provide support forlink-layer connectivity via both Ethernet links and HPC links. Thus,both Ethernet and HPC communications can be supported by a singlehigh-bandwidth, low-latency switch fabric. The embodiments are notlimited to this example.

FIG. 6 illustrates a general overview of a rack architecture 600 thatmay be representative of an architecture of any particular one of theracks depicted in FIGS. 1 to 4 according to some embodiments. Asreflected in FIG. 6, rack architecture 600 may generally feature aplurality of sled spaces into which sleds may be inserted, each of whichmay be robotically-accessible via a rack access region 601. In theparticular non-limiting example depicted in FIG. 6, rack architecture600 features five sled spaces 603-1 to 603-5. Sled spaces 603-1 to 603-5feature respective multi-purpose connector modules (MPCMs) 616-1 to616-5.

FIG. 7 illustrates an example of a sled 704 that may be representativeof a sled of such a type. As shown in FIG. 7, sled 704 may comprise aset of physical resources 705, as well as an MPCM 716 designed to couplewith a counterpart MPCM when sled 704 is inserted into a sled space suchas any of sled spaces 603-1 to 603-5 of FIG. 6. Sled 704 may alsofeature an expansion connector 717. Expansion connector 717 maygenerally comprise a socket, slot, or other type of connection elementthat is capable of accepting one or more types of expansion modules,such as an expansion sled 718. By coupling with a counterpart connectoron expansion sled 718, expansion connector 717 may provide physicalresources 705 with access to supplemental computing resources 705Bresiding on expansion sled 718. The embodiments are not limited in thiscontext.

FIG. 8 illustrates an example of a rack architecture 800 that may berepresentative of a rack architecture that may be implemented in orderto provide support for sleds featuring expansion capabilities, such assled 704 of FIG. 7. In the particular non-limiting example depicted inFIG. 8, rack architecture 800 includes seven sled spaces 803-1 to 803-7,which feature respective MPCMs 816-1 to 816-7. Sled spaces 803-1 to803-7 include respective primary regions 803-1A to 803-7A and respectiveexpansion regions 803-1B to 803-7B. With respect to each such sledspace, when the corresponding MPCM is coupled with a counterpart MPCM ofan inserted sled, the primary region may generally constitute a regionof the sled space that physically accommodates the inserted sled. Theexpansion region may generally constitute a region of the sled spacethat can physically accommodate an expansion module, such as expansionsled 718 of FIG. 7, in the event that the inserted sled is configuredwith such a module.

FIG. 9 illustrates an example of a rack 902 that may be representativeof a rack implemented according to rack architecture 800 of FIG. 8according to some embodiments. In the particular non-limiting exampledepicted in FIG. 9, rack 902 features seven sled spaces 903-1 to 903-7,which include respective primary regions 903-1A to 903-7A and respectiveexpansion regions 903-1B to 903-7B. In various embodiments, temperaturecontrol in rack 902 may be implemented using an air cooling system. Forexample, as reflected in FIG. 9, rack 902 may feature a plurality offans 919 that are generally arranged to provide air cooling within thevarious sled spaces 903-1 to 903-7. In some embodiments, the height ofthe sled space is greater than the conventional “IU” server height. Insuch embodiments, fans 919 may generally comprise relatively slow, largediameter cooling fans as compared to fans used in conventional rackconfigurations. Running larger diameter cooling fans at lower speeds mayincrease fan lifetime relative to smaller diameter cooling fans runningat higher speeds while still providing the same amount of cooling. Thesleds are physically shallower than conventional rack dimensions.Further, components are arranged on each sled to reduce thermalshadowing (i.e., not arranged serially in the direction of air flow). Asa result, the wider, shallower sleds allow for an increase in deviceperformance because the devices can be operated at a higher thermalenvelope (e.g., 250 W) due to improved cooling (i.e., no thermalshadowing, more space between devices, more room for larger heat sinks,etc.).

MPCMs 916-1 to 916-7 may be configured to provide inserted sleds withaccess to power sourced by respective power modules 920-1 to 920-7, eachof which may draw power from an external power source 921. In variousembodiments, external power source 921 may deliver alternating current(AC) power to rack 902, and power modules 920-1 to 920-7 may beconfigured to convert such AC power to direct current (DC) power to besourced to inserted sleds. In some embodiments, for example, powermodules 920-1 to 920-7 may be configured to convert 277-volt AC powerinto 12-volt DC power for provision to inserted sleds via respectiveMPCMs 916-1 to 916-7. The embodiments are not limited to this example.

MPCMs 916-1 to 916-7 may also be arranged to provide inserted sleds withoptical signaling connectivity to a dual-mode optical switchinginfrastructure 914, which may be the same as—or similar to—dual-modeoptical switching infrastructure 514 of FIG. 5. In various embodiments,optical connectors contained in MPCMs 916-1 to 916-7 may be designed tocouple with counterpart optical connectors contained in MPCMs ofinserted sleds to provide such sleds with optical signaling connectivityto dual-mode optical switching infrastructure 914 via respective lengthsof optical cabling 922-1 to 922-7. In some embodiments, each such lengthof optical cabling may extend from its corresponding MPCM to an opticalinterconnect loom 923 that is external to the sled spaces of rack 902.In various embodiments, optical interconnect loom 923 may be arranged topass through a support post or other type of load-bearing element ofrack 902. The embodiments are not limited in this context. Becauseinserted sleds connect to an optical switching infrastructure via MPCMs,the resources typically spent in manually configuring the rack cablingto accommodate a newly inserted sled can be saved.

FIG. 10 illustrates an example of a sled 1004 that may be representativeof a sled designed for use in conjunction with rack 902 of FIG. 9according to some embodiments. Sled 1004 may feature an MPCM 1016 thatcomprises an optical connector 1016A and a power connector 1016B, andthat is designed to couple with a counterpart MPCM of a sled space inconjunction with insertion of MPCM 1016 into that sled space. CouplingMPCM 1016 with such a counterpart MPCM may cause power connector 1016 tocouple with a power connector comprised in the counterpart MPCM. Thismay generally enable physical resources 1005 of sled 1004 to sourcepower from an external source, via power connector 1016 and powertransmission media 1024 that conductively couples power connector 1016to physical resources 1005.

Sled 1004 may also include dual-mode optical network interface circuitry1026. Dual-mode optical network interface circuitry 1026 may generallycomprise circuitry that is capable of communicating over opticalsignaling media according to each of multiple link-layer protocolssupported by dual-mode optical switching infrastructure 914 of FIG. 9.In some embodiments, dual-mode optical network interface circuitry 1026may be capable both of Ethernet protocol communications and ofcommunications according to a second, high-performance protocol. Invarious embodiments, dual-mode optical network interface circuitry 1026may include one or more optical transceiver modules 1027, each of whichmay be capable of transmitting and receiving optical signals over eachof one or more optical channels. The embodiments are not limited in thiscontext.

Coupling MPCM 1016 with a counterpart MPCM of a sled space in a givenrack may cause optical connector 1016A to couple with an opticalconnector comprised in the counterpart MPCM. This may generallyestablish optical connectivity between optical cabling of the sled anddual-mode optical network interface circuitry 1026, via each of a set ofoptical channels 1025. Dual-mode optical network interface circuitry1026 may communicate with the physical resources 1005 of sled 1004 viaelectrical signaling media 1028. In addition to the dimensions of thesleds and arrangement of components on the sleds to provide improvedcooling and enable operation at a relatively higher thermal envelope(e.g., 250 W), as described above with reference to FIG. 9, in someembodiments, a sled may include one or more additional features tofacilitate air cooling, such as a heatpipe and/or heat sinks arranged todissipate heat generated by physical resources 1005. It is worthy ofnote that although the example sled 1004 depicted in FIG. 10 does notfeature an expansion connector, any given sled that features the designelements of sled 1004 may also feature an expansion connector accordingto some embodiments. The embodiments are not limited in this context.

FIG. 11 illustrates an example of a data center 1100 that may generallybe representative of one in/for which one or more techniques describedherein may be implemented according to various embodiments. As reflectedin FIG. 11, a physical infrastructure management framework 1150A may beimplemented to facilitate management of a physical infrastructure 1100Aof data center 1100. In various embodiments, one function of physicalinfrastructure management framework 1150A may be to manage automatedmaintenance functions within data center 1100, such as the use ofrobotic maintenance equipment to service computing equipment withinphysical infrastructure 1100A. In some embodiments, physicalinfrastructure 1100A may feature an advanced telemetry system thatperforms telemetry reporting that is sufficiently robust to supportremote automated management of physical infrastructure 1100A. In variousembodiments, telemetry information provided by such an advancedtelemetry system may support features such as failureprediction/prevention capabilities and capacity planning capabilities.In some embodiments, physical infrastructure management framework 1150Amay also be configured to manage authentication of physicalinfrastructure components using hardware attestation techniques. Forexample, robots may verify the authenticity of components beforeinstallation by analyzing information collected from a radio frequencyidentification (RFID) tag associated with each component to beinstalled. The embodiments are not limited in this context.

As shown in FIG. 11, the physical infrastructure 1100A of data center1100 may comprise an optical fabric 1112, which may include a dual-modeoptical switching infrastructure 1114. Optical fabric 1112 and dual-modeoptical switching infrastructure 1114 may be the same as—or similarto—optical fabric 412 of FIG. 4 and dual-mode optical switchinginfrastructure 514 of FIG. 5, respectively, and may providehigh-bandwidth, low-latency, multi-protocol connectivity among sleds ofdata center 1100. As discussed above, with reference to FIG. 1, invarious embodiments, the availability of such connectivity may make itfeasible to disaggregate and dynamically pool resources such asaccelerators, memory, and storage. In some embodiments, for example, oneor more pooled accelerator sleds 1130 may be included among the physicalinfrastructure 1100A of data center 1100, each of which may comprise apool of accelerator resources—such as co-processors and/or FPGAs, forexample—that is globally accessible to other sleds via optical fabric1112 and dual-mode optical switching infrastructure 1114.

In another example, in various embodiments, one or more pooled storagesleds 1132 may be included among the physical infrastructure 1100A ofdata center 1100, each of which may comprise a pool of storage resourcesthat is globally accessible to other sleds via optical fabric 1112 anddual-mode optical switching infrastructure 1114. In some embodiments,such pooled storage sleds 1132 may comprise pools of solid-state storagedevices such as solid-state drives (SSDs). In various embodiments, oneor more high-performance processing sleds 1134 may be included among thephysical infrastructure 1100A of data center 1100. In some embodiments,high-performance processing sleds 1134 may comprise pools ofhigh-performance processors, as well as cooling features that enhanceair cooling to yield a higher thermal envelope of up to 250 W or more.In various embodiments, any given high-performance processing sled 1134may feature an expansion connector 1117 that can accept a far memoryexpansion sled, such that the far memory that is locally available tothat high-performance processing sled 1134 is disaggregated from theprocessors and near memory comprised on that sled. In some embodiments,such a high-performance processing sled 1134 may be configured with farmemory using an expansion sled that comprises low-latency SSD storage.The optical infrastructure allows for compute resources on one sled toutilize remote accelerator/FPGA, memory, and/or SSD resources that aredisaggregated on a sled located on the same rack or any other rack inthe data center. The remote resources can be located one switch jumpaway or two-switch jumps away in the spine-leaf network architecturedescribed above with reference to FIG. 5. The embodiments are notlimited in this context.

In various embodiments, one or more layers of abstraction may be appliedto the physical resources of physical infrastructure 1100A in order todefine a virtual infrastructure, such as a software-definedinfrastructure 1100B. In some embodiments, virtual computing resources1136 of software-defined infrastructure 1100B may be allocated tosupport the provision of cloud services 1140. In various embodiments,particular sets of virtual computing resources 1136 may be grouped forprovision to cloud services 1140 in the form of SDI services 1138.Examples of cloud services 1140 may include—without limitation—softwareas a service (SaaS) services 1142, platform as a service (PaaS) services1144, and infrastructure as a service (IaaS) services 1146.

In some embodiments, management of software-defined infrastructure 1100Bmay be conducted using a virtual infrastructure management framework1150B. In various embodiments, virtual infrastructure managementframework 1150B may be designed to implement workload fingerprintingtechniques and/or machine-learning techniques in conjunction withmanaging allocation of virtual computing resources 1136 and/or SDIservices 1138 to cloud services 1140. In some embodiments, virtualinfrastructure management framework 1150B may use/consult telemetry datain conjunction with performing such resource allocation. In variousembodiments, an application/service management framework 1150C may beimplemented in order to provide QoS management capabilities for cloudservices 1140. The embodiments are not limited in this context.

Referring now to FIG. 12, in an illustrative embodiment, a system 1200for managing network statistic counters of a target computing device1206 (e.g., one of the sleds 204, 404, 504, 1004, 1130, 1132, 1134)includes one or more source computing devices 1202 communicativelycoupled to the target computing device 1206 via a network 1204. Asillustratively shown, the target computing device 1206 of FIG. 12includes one or more software consumers 1208, a consumer control queuemanager 1210, and a counter engine 1212. In use, the target computingdevice 1206 manages multiple active counter pages (see, e.g., the activecounter pages 1702 of FIG. 17), each of which is usable to track one ormore active statistic counters. The active counter pages includestatistic counter identifiers usable to lookup the value ofcorresponding statistic counters (i.e., active statistic counters) whichare of interest to the software consumer.

Each active statistic counter is configured to store a value which isindicative of a number of associated network packets that were receivedover a period of time. Accordingly, a software consumer (e.g., one ofthe software consumers 1208), such as a software application presentlybeing executed by the target computing device 1206, can subscribe to oneor more of the active counter pages and track a certain type of networkpackets that were received over a period of time. To manage the activecounter pages and the statistic counters associated therewith, thetarget computing device 1206, or more particularly a counter engine(e.g., the counter engine 1212) of the target computing device 1206, isconfigured to identify a statistic counter which corresponds to areceived network packet and increment a value associated with theidentified statistic counter upon receipt of the network packet.

Additionally, as described in further detail below, the counter engine1212 is configured to generate, upon having detected a triggering event,a notification message that includes the statistic counter values of anactive counter page to which the software consumer has subscribed. Suchtriggering events may include a timer having expired, a flush requestfrom the subscribing software, the value of a statistic counter havingexceeded a threshold value (e.g., based on a number of bits allocatedper counter or other threshold determining factor), a statistic counterhaving grown by a predetermined value, or some other triggering event.Upon having detected the triggering event, the counter engine 1212 isconfigured to mark the appropriate active counter page for notificationand allocate a new counter page for subsequently received networkpackets with the applicable statistic counters set to their initialvalues (e.g., zero). Additionally, the counter engine 1212 is configuredto transmit the generated notification message to a subscribed softwareconsumer via a consumer control queue (e.g., the consumer control queuemanager 1210). Accordingly, the software consumer can then update amaster copy of the statistic counter values.

As such, unlike present techniques, software consumers are not requiredto poll the counter values from memory located in the hardware and canreply to hardware to provide the notification services. Additionally, asdescribed herein, counter engine 1212 and associated memory buffer isonly required to maintain a sufficient set of counters during thenotification period, as the master copy of the statistic counter valuesis maintained by the software, which typically has access to a muchlarger memory space. Further, since the overall size of the counters isonly dependent on maintaining a sufficient set of counters during thenotification period, the need to have a large on-die memory can besignificantly reduced, thereby allowing scaling to computing systemswhich may require millions of statistic counters.

The target computing device 1206 may be embodied as any type ofcomputation or computer device capable of performing the functionsdescribed herein, including, without limitation, a server (e.g.,stand-alone, rack-mounted, blade, etc.), switch (e.g., a disaggregatedswitch, a rack-mounted switch, a standalone switch, a fully managedswitch, a partially managed switch, a full-duplex switch, and/or ahalf-duplex communication mode enabled switch), a router, a networkappliance (e.g., physical or virtual), a web appliance, a distributedcomputing system, a processor-based system, and/or a multiprocessorsystem. In an illustrative embodiment, the target computing device 1206is embodied as a server sled, such as one of the sleds 204, 404, 504,1004, 1130, 1132, 1134 described above.

As shown in FIG. 13, the illustrative target computing device 1206(e.g., a compute sled) includes a compute engine 1300, an input/output(I/O) subsystem 1306, communication circuitry 1308, a data storagedevice 1314, and, in some embodiments, one or more peripheral devices1312. Of course, in other embodiments, the target computing device 1206may include alternative or additional components, such as those commonlyfound in a computing device (e.g., a graphics processing unit (GPU), apower supply, fans, etc.). For example, in some embodiments, the targetcomputing device 1206 may be embodied as an accelerator sled having oneor more field programmable gate array (FPGA), a memory sled having anumber of memory storage devices and associated controllers, or a datastorage sled having a number of data storage devices (e.g., solid statedrives) and associated controllers. Additionally, in some embodiments,one or more of the illustrative components may be incorporated in, orotherwise form a portion of, another component. Further, in someembodiments, one or more of the illustrative components may be omittedfrom the target computing device 1206.

The compute engine 1300 may be embodied as any type of device orcollection of devices capable of performing various compute functionsdescribed below. In some embodiments, the compute engine 1300 may beembodied as a single device such as an integrated circuit, an embeddedsystem, a field-programmable gate array (FPGA), a system-on-a-chip(SOC), or other integrated system or device. Additionally, in someembodiments, the compute engine 1300 includes or is embodied as aprocessor 1302 and a memory 1304. The compute engine 1300 may beembodied as any type of central processing unit capable of carrying outinstructions to perform the functions described herein. For example, theprocessor 1302 may be embodied as a single core processor, a multi-coreprocessor, a digital signal processor (DSP), a field programmable gatearray (FPGA), a microcontroller, or other processor orprocessing/controlling circuit. Irrespective of the embodiment of theprocessor 1302, the processor 1302 may be embodied as an independentlogical execution unit capable of executing programmed instructions. Insome embodiments, the processor 1302 may include a portion of cachememory (i.e., memory that can be accessed more quickly than the memory1304) and functional units usable to independently execute programs orthreads, which are not shown to preserve clarity of the description. Itshould be appreciated that, in some embodiments, the target computingdevice 1206 may contain more than one processor 1302.

The memory 1304 may be embodied as any type of volatile or non-volatilememory or data storage capable of performing the functions describedherein. In operation, the memory 1304 may store various data andsoftware used during operation of the target computing device 1206, suchas operating systems, applications, programs, libraries, and drivers.The I/O subsystem 1306 may be embodied as circuitry and/or components tofacilitate input/output operations with the compute engine 1300 andother components of the target computing device 1206. For example, theI/O subsystem 1306 may be embodied as, or otherwise include, memorycontroller hubs, input/output control hubs, firmware devices,communication links (i.e., point-to-point links, bus links, wires,cables, light guides, printed circuit board traces, etc.), and/or othercomponents and subsystems to facilitate the input/output operations. Insome embodiments, the I/O subsystem 1306 may form a portion of asystem-on-a-chip (SoC) and be incorporated, along with the processor1302, the memory 1304, and other components of the target computingdevice 1206, on a single integrated circuit chip.

The communication circuitry 1308 may be embodied as any communicationcircuit, device, or collection thereof, capable of enablingcommunications between the target computing device 1206 and othercomputing devices, such as the source computing device 1202, as well asany network communication enabling devices, such as an access point,network switch/router, etc., to allow communication over the network1204. The communication circuitry 1308 may be configured to use any oneor more communication technologies (e.g., wireless or wiredcommunication technologies) and associated protocols (e.g., Ethernet,Bluetooth®, Wi-Fi®, WiMAX, LTE, 5G, etc.) to effect such communication.

In some embodiments, performance of one or more of the functions ofcommunication circuitry 1308 as described herein may be performed byspecialized circuitry, hardware, or combination thereof of thecommunication circuitry 1308, which may be embodied as asystem-on-a-chip (SoC) or otherwise form a portion of a SoC of thetarget computing device 1206 (e.g., incorporated on a single integratedcircuit chip along with the processor 1302, the memory 1304, and/orother components of the target computing device 1206). Alternatively, insome embodiments, the specialized circuitry, hardware, or combinationthereof may be embodied as one or more discrete processing units of thetarget computing device 1206, each of which may be capable of performingone or more of the functions described herein.

The illustrative communication circuitry 1308 includes a networkinterface controller (NIC) 1310. The NIC 1310 may be embodied as one ormore add-in-boards, daughtercards, network interface cards, controllerchips, chipsets, or other devices that may be used by the targetcomputing device 1206. In some embodiments, for example, the NIC 1310may be integrated with the compute engine 1300, embodied as an expansioncard coupled to the I/O subsystem 1306 over an expansion bus (e.g., PCIExpress (PCIe)), included as a part of a SoC that includes one or moreprocessors, or included on a multichip package that also contains one ormore processors.

It should be appreciated that, in some embodiments, the communicationcircuitry 1308 may include specialized circuitry, hardware, or acombination thereof to perform pipeline logic (e.g., hardwarealgorithms) for performing the functions described herein, includingprocessing network packets (e.g., parse received network packets,determine destination computing devices for each received networkpackets, forward the network packets to a particular buffer queue of arespective host buffer of the target computing device 1206, etc.),perform computational functions, etc. For example, in some embodiments,at least a portion of the operations described herein as being performedby the counter engine 1212 may be performed by the communicationcircuitry 1308, or more particularly by the NIC 1310.

The data storage device 1314 may be embodied as any type of device ordevices configured for short-term or long-term storage of data such as,for example, memory devices and circuits, memory cards, hard diskdrives, solid-state drives, or other data storage devices. It should beappreciated that the data storage device 1314 and/or the memory 1304(e.g., the computer-readable storage media) may store various data asdescribed herein, including operating systems, applications, programs,libraries, drivers, instructions, etc., capable of being executed by aprocessor (e.g., the processor 1300) of the target computing device1206.

The peripheral device(s) 1312 may include any type of device that isusable to input information into the target computing device 1206 and/orreceive information from the target computing device 1206. Theperipheral devices 1312 may be embodied as any auxiliary device usableto input information into the target computing device 1206, such as akeyboard, a mouse, a microphone, a barcode reader, an image scanner,etc. or output information from the target computing device 1206, suchas a display, a speaker, graphics circuitry, a printer, a projector,etc. It should be appreciated that, in some embodiments, one or more ofthe peripheral devices 1312 may function as both an input device and anoutput device (e.g., a touchscreen display, a digitizer on top of adisplay screen, etc.). It should be further appreciated that the typesof peripheral devices 1222 connected to the target computing device 1206may depend on, for example, the type and/or intended use of the targetcomputing device 1206. Additionally or alternatively, in someembodiments, the peripheral devices 1222 may include one or more ports,such as a USB port, for example, for connecting external peripheraldevices to the target computing device 1206.

The network 1204 may be embodied as any type of wired or wirelesscommunication network, including but not limited to a wireless localarea network (WLAN), a wireless personal area network (WPAN), a cellularnetwork (e.g., Global System for Mobile Communications (GSM), Long-TermEvolution (LTE), etc.), a telephony network, a digital subscriber line(DSL) network, a cable network, a local area network (LAN), a wide areanetwork (WAN), a global network (e.g., the Internet), or any combinationthereof. It should be appreciated that, in such embodiments, the network1204 may serve as a centralized network and, in some embodiments, may becommunicatively coupled to another network (e.g., the Internet).Accordingly, the network 1204 may include a variety of other virtualand/or physical network computing devices (e.g., routers, switches,network hubs, servers, storage devices, compute devices, etc.), asneeded to facilitate communication between the source computing device1202 and the target computing device 1206, which are not shown topreserve clarity of the description.

The source computing device 1202 may be embodied as any type ofcomputation or computer device capable of performing the functionsdescribed herein, including, without limitation, a mobile computingdevice (e.g., a smartphone, a tablet computer, a laptop computer, anotebook computer, a wearable device), a desktop computer, a server(e.g., stand-alone, rack-mounted, blade, etc.), switch (e.g., adisaggregated switch, a rack-mounted switch, a standalone switch, afully managed switch, a partially managed switch, a full-duplex switch,and/or a half-duplex communication mode enabled switch), a router, anetwork appliance (e.g., physical or virtual), a web appliance, adistributed computing system, a processor-based system, and/or amultiprocessor system.

It should be appreciated that the source computing device 1202 includesgenerally like components to that described herein for the illustrativetarget computing device 1206. As such, further descriptions of the likecomponents are not repeated herein for clarity of the description withthe understanding that the description of the corresponding componentsprovided above in regard to the target computing device 1206 appliesequally to the corresponding components of the source computing device1202. For example, the source computing device 1202 may be embodied asanother sled 204, 404, 504, 1004, 1130, 1132, 1134 in some embodiments.Of course, it should be appreciated that the source computing device1202 may include additional and/or alternative components, depending onthe embodiment.

Referring now to FIG. 14, in use, the target computing device 1206establishes an environment 1400 during operation. The illustrativeenvironment 1400 includes a network traffic ingress/egress manager 1406,as well as the one or more software consumers 1208, the consumer controlqueue manager 1210, and the counter engine 1212 of the illustrativetarget computing device 1206 of FIG. 12. The various components of theenvironment 1400 may be embodied as hardware, firmware, software, or acombination thereof. As such, in some embodiments, one or more of thecomponents of the environment 1400 may be embodied as circuitry orcollection of electrical devices (e.g., a network traffic ingress/egressmanager circuit 1406, a consumer control queue manager circuit 1210, acounter engine circuit 1212, etc.).

It should be appreciated that, in some embodiments, one or more of theillustrative components may form a portion of another component and/orone or more of the illustrative components may be independent of oneanother. Further, in some embodiments, one or more of the components ofthe environment 1400 may be embodied as virtualized hardware componentsor emulated architecture, which may be established and maintained by theprocessor 1300, the NIC 1310, or other component(s) of the targetcomputing device 1206. It should be appreciated that the targetcomputing device 1206 may include other components, sub-components,modules, sub-modules, logic, sub-logic, and/or devices commonly found ina computing device, which are not illustrated in FIG. 14 for clarity ofthe description.

In the illustrative environment 1400, the target computing device 1206additionally includes counter data 1402 and notification message data1404, each of which may be accessed by the various components and/orsub-components of the target computing device 1206. Further, each of thecounter data 1402 and the notification message data 1404 may be accessedby the various illustrative components of the target computing device1206. Additionally, it should be appreciated that in some embodimentsthe data stored in, or otherwise represented by, each of the counterdata 1402 and the notification message data 1404 may not be mutuallyexclusive relative to each other. For example, in some implementations,data stored in the counter data 1402 may also be stored as a portion ofone or more of the notification message data 1404. As such, although thevarious data utilized by the target computing device 1206 is describedherein as particular discrete data, such data may be combined,aggregated, and/or otherwise form portions of a single or multiple datasets, including duplicative copies, in other embodiments.

The software consumer(s) 1208 may be embodied as any type of programbeing presently executed on the target computing device 1206 whichmaintains a master copy of the status counters and consumes (i.e.,processes) counter values received in notification messages transmittedto the software consumers 1208 by the counter engine 1212 via a consumercontrol queue. Accordingly, the consumer control queue manager 1210,which may be embodied as hardware, firmware, software, virtualizedhardware, emulated architecture, and/or a combination thereof asdiscussed above, is configured to function as an interface betweensoftware consumers (e.g., the software consumers 1208 of FIG. 12) andthe counter engine 1212.

To do so, the consumer control queue manager 1210 is configured tocreate and manage a consumer control queue for each software consumersubscribed to the counter engine 1212. Each consumer control queue isconfigured to receive and queue the counter notification messagesdescribed herein, as well as distribute the queued counter notificationmessages to the associated software consumer. To initialize the consumercontrol queues, the consumer control queue manager 1210 is configured toinitialize and allocate each consumer control queue, as well asestablish a unique identifier for each consumer control queue, which isusable by the software consumer to request notification packets from therespective consumer control queue.

Additionally, the consumer control queue manager 1210 may be configuredto assign an interrupt to each consumer control queue. In someembodiments, the consumer control queue manager 1210 may be configuredto set the consumer control queue on a core which is not processing fastpath network traffic. The consumer control queue manager 1210 may befurther configured to communicate with a driver, such as may be requiredto set parameters of the consumer control queues, such as the number ofbuffers to allocate for the consumer control queues (e.g., to handle aworst-case flush rate).

The network traffic ingress/egress manager 1406, which may be embodiedas hardware, firmware, software, virtualized hardware, emulatedarchitecture, and/or a combination thereof as discussed above, isconfigured to receive inbound and route/transmit outbound networktraffic. Accordingly, the network traffic ingress/egress manager 1406 isconfigured to facilitate inbound network communications (e.g., networktraffic, network packets, network flows, etc.) to the target computingdevice 1206 by managing (e.g., create, modify, delete, etc.) connectionsto physical and virtual network ports (i.e., virtual network interfaces)of the target computing device 1206 (e.g., via the communicationcircuitry 1306), as well as the ingress buffers/queues associatedtherewith. Further, the network traffic ingress/egress manager 1406 isconfigured to parse received network packets, such as may be performedon a header or payload/body of a received network packet to identify aproperty or indicator of the network packet which may be usable toclassify the received network packet and/or determine a flow to whichthe received network packet corresponds.

Additionally, the network traffic ingress/egress manager 1406 isconfigured to facilitate outbound network communications (e.g., networktraffic, network packet streams, network flows, etc.) from the targetcomputing device 1206 by managing (e.g., create, modify, delete, etc.)connections to physical and virtual network ports/interfaces of thetarget computing device 1206 (e.g., via the communication circuitry1306), as well as the egress buffers/queues associated therewith.Further, the network traffic ingress/egress manager 1406 is configuredto construct/add the appropriate headers at the applicable layers to thenetwork packet, the payload/body (i.e., the statistic counter values andassociated identifiers), and any footers, such as may be used to storeerror-detecting code (e.g., cyclic redundancy check (CRC) dataverification information).

The counter engine 1212, which may be embodied as hardware, firmware,software, virtualized hardware, emulated architecture, and/or acombination thereof as discussed above, is configured to maintain thevalues of statistic counters over a period of time, package thosestatistic counter values to which a software consumer has subscribedinto a notification message, and transmit the notification message tothe subscribed software consumer. To do so, the illustrative counterengine 1212 includes a counter page manager 1408, a counter valuemanager 1410, and a counter notification manager 1412.

The counter page manager 1408, which may be embodied as hardware,firmware, software, virtualized hardware, emulated architecture, and/ora combination thereof, is configured to create and manage the activecounter pages (see, e.g., the active counter pages 1702 of FIG. 17). Todo so, the counter page manager 1408 is configured to allocate newactive counter pages and manage which software consumer (e.g., one ofthe software consumers 1208 of FIG. 12) is associated with each activecounter page. Each active counter page is usable to map a statisticcounter identifier to a memory address entry of the value of the mappedstatistic counter.

It should be appreciated that a software consumer can subscribe to morethan one active counter page. Accordingly, the counter page manager 1408may be configured to generate and provide the software consumer with anidentifier of the active counter pages to which the software consumercorresponds. Alternatively, the counter page manager 1408 may beconfigured to receive the identifier from the software consumer and usethe identifier to map the software consumer to the active counter pagesto which the software consumer corresponds. In other words, theidentifier, irrespective of the source, may be usable by the softwareconsumer to identify which active counter page(s) are associated withmessages (e.g., notification messages) received from the counter engine1212.

The counter value manager 1410, which may be embodied as hardware,firmware, software, virtualized hardware, emulated architecture, and/ora combination thereof, is configured to create the statistic countersand update the statistic counter values. For example, upon receiving anetwork packet and identifying the packet flow associated with thereceived network packet (e.g., such as may be performed by the networktraffic ingress/egress manager 1406), the counter value manager 1410 isconfigured to identify which active counter page(s) are associated withthe software consumer based on the identified packet flow. It should beappreciated that, alternatively, in other embodiments, another indicatormay be additionally or alternatively associated with the network packet(e.g., a type of payload data, a tuple, a source internet protocol (IP)address, a destination IP address, a source port number, a destinationport number, etc.) which may be used to identify the appropriatestatistic counter identifier for each received network packet.

The counter value manager 1410 is configured to perform a lookupoperation to retrieve a present value of the statistic counter (i.e., acounter value) whose address is mapped to the statistic counteridentifier in the identified active counter page. If the statisticcounter is new (i.e., the lookup was unsuccessful), the counter valuemanager 1410 is configured to allocate the statistic counter in a bankof counter memory (see, e.g., the counter banks 1706 of FIG. 17) with aninitial default value (e.g., zero) using the applicable counter memoryentry. Additionally, the counter value manager 1410 is configured to addthe statistic counter to the appropriate active counter page (i.e.,associated with the software consumer which corresponds to theidentified packet flow). If the statistic counter exists in the activecounter page (i.e., the lookup was successful), the counter valuemanager 1410 is configured to use the counter memory entry addressassociated with the statistic counter to read the present value,increment the present value, and write the incremented value back to thecounter memory.

The counter notification manager 1412, which may be embodied ashardware, firmware, software, virtualized hardware, emulatedarchitecture, and/or a combination thereof, is configured to generate anotification message and transmit the generated notification message tothe applicable consumer control queue (e.g., via the consumer controlqueue manager). To do so, the counter notification manager 1412 isconfigured to detect a notification triggering event and request thevalues for each statistic counter mapped to the active counter pageassociated with a software consumer associated with the notificationtriggering event. A notification triggering event may include anydetected event which prompts the statistic counter values associatedwith an active counter page to be read. As described previously, suchtriggering events may include a timer having expired, a flush requestfrom the subscribing software, the value of a statistic counter havingexceeded a threshold value (e.g., based on a number of bits allocatedper counter or other threshold determining factor), a statistic counterhaving grown by a predetermined value, or some other notificationtriggering event.

Upon having received the requested statistic counter values, the counternotification manager 1412 is additionally configured to generate anotification message that includes the received statistic counter valuesas a payload/body of the notification message. Additionally, the counternotification manager 1412 is configured to attach a header to thenotification message that includes a timestamp indicative of the time atwhich the notification message was generated and an indication of thetotal number of received statistic counter values. The counternotification manager 1412 is further configured to transmit thenotification message to a consumer control queue associated with thesoftware consumer for which the notification message has been generated.Accordingly, the software consumer can update a master copy of thestatistic counter values upon receipt of the notification message fromthe consumer control queue. In some embodiments, the master copy of thestatistic counter values may be stored in the counter data 1402.Additionally, in some embodiments, at least a portion of thenotification message may be stored in the notification message data1404.

Referring now to FIG. 15, a method 1500 for updating a network statisticcounter associated with a received network packet is shown which may beexecuted by the target computing device 1206, or more particularly by aNIC (e.g., the NIC 1310 of FIG. 13) of the target computing device 1206.It should be appreciated that at least a portion of the functionalitydescribed in the method 1500 may be performed by the counter engine1212. The method 1500 begins in block 1502, in which the NIC 1310determines whether a network packet has been received. If so, the method1500 advances to block 1504 in which the NIC 1310 determines a networkpacket identifier associated with the received network packet. In someembodiments, the network packet identifier may be determined uponparsing and processing at least a portion of the received network packetheader and/or payload/body. In block 1506, the NIC 1310 determines apacket flow associated with the received network packet based on thedetermined network packet identifier.

In block 1508, the NIC 1310 identifies a software consumer and astatistic counter based on the determined packet flow. In block 1510,the NIC 1310 identifies one or more active counter pages associated withthe identified software consumer. In block 1512, the NIC 1310 performs alookup operation for the statistic counter in the identified activecounter page using an identifier of the statistic counter. As describedpreviously, the lookup operation is performed on the active counter page(i.e., using the statistic counter identifier) to retrieve a memoryentry address of the statistic counter. In block 1514, the NIC 1310determines whether the lookup operation was successful. In other words,the NIC 1310 determines whether a matching statistic counter identifierwas found in the identified active counter page and a correspondingcounter memory address of the statistic counter has been retrieved.

If the NIC 1310 determines the lookup operation was successful in block1514, the method 1500 branches to block 1516. In block 1516, the NIC1310 reads the value of the statistic counter at the statistic countermemory entry address retrieved during the lookup operation. For example,FIG. 17 displays an illustrative high-level architecture of statisticcounters 1708 in a memory of the target computing device 1206. Asillustratively shown the active counter pages 1702 includes a firstactive counter page, designated as active counter page (1) 1702 a, asecond active counter page, designated as active counter page (2) 1702b, and a third active counter page, designated as active counter page(N) 1702 c, wherein “N” is a positive integer which represents the “Nth”active counter page 1702.

As also illustratively shown, active counter page (1) 1702 a includes afirst counter identifier entry, designated as counter identifier (1)1704 a, a second counter identifier entry, designated as counteridentifier (2) 1704 b, and a third counter identifier entry, designatedas counter identifier (N) 1704 c, wherein “N” is a positive integerwhich represents the “Nth” counter identifier entry 1704. Additionally,the illustrative counter banks 1706 include a first counter bank,designated as counter bank (1) 1706 a, and second counter bank,designated as counter bank (N) 1706 b, wherein “N” is a positive integerwhich represents the “Nth” counter bank 1706. The counter bank (1) 1706a illustratively includes a first counter value entry, designated ascounter value (1) 1708 a, a second counter value entry, designated ascounter value (2) 1708 b, and a third counter value entry, designated ascounter value (N) 1708 c, wherein “N” is a positive integer whichrepresents the “Nth” counter value entry 1708.

In such an embodiment, to perform a lookup operation, the NIC 1310 isconfigured to determine whether a matching counter identifier is in acounter identifier entry 1704 of the active counter page 1702 beingsearched. As noted previously, each active counter page 1702 includes aset of statistic counter identifiers and their corresponding countermemory address entries, each of which correspond to a counter valueentry 1708 of a counter bank 1706 in which the statistic counter valuesare stored. In an illustrative example in which the packet flowcorresponds to a software consumer associated with the active counterpage (1) 1702 a, the NIC 1310 is configured to determine whether theactive counter page (1) 1702 a includes a statistic counter identifierin one of the counter entries 1704 which matches the counter identifiercorresponding to the identified statistic counter (i.e., identifiedbased on the determined packet flow). In furtherance of the illustrativeexample, upon locating a matching counter identifier, as indicated bythe highlighted border of the counter identifier (2) 1704 b, the NIC1310 is configured to make a read request to the counter memory addressof the counter identifier (2) 1704 b, which as illustratively shown andindicated by the highlighted border and arrow is the counter value (1)1708 a of the counter bank (1) 1706 a.

Referring again to FIG. 15, in block 1518, the NIC 1310 increments thevalue read from the statistic counter. In block 1520, the NIC 1310writes the incremented statistic counter value back to the countermemory address from which the statistic counter value was initiallyread. Referring back to block 1514, in the event the NIC 1310 determinesthe lookup operation was not successful, the method 1500 branches toblock 1522. In block 1522, the NIC 1310 adds a new counter to an activecounter page associated with the identified software consumer. In block1524, the NIC 1310 allocates a new statistic counter at a counter memoryaddress. In block 1526, the NIC 1310 initializes a value of the newstatistic counter to a default initial value (e.g., zero). In block1528, the NIC 1310 writes an identifier of the statistic counter and thecounter memory address to a counter identifier entry (e.g., one of thecounter identifier entries 1704 of FIG. 17) in the applicable activecounter page (e.g., one of the active counter pages 1702 of FIG. 17).

Referring now to FIG. 16, a method 1600 for notifying a softwareconsumer of the present values of one or more network statisticcounter(s) to which the software consumer has subscribed is shown whichmay be executed by the target computing device 1206, or moreparticularly by a NIC (e.g., the NIC 1310 of FIG. 13) of the targetcomputing device 1206. It should be appreciated that at least a portionof the functionality described in the method 1600 may be performed bythe counter engine 1212. The method 1600 begins in block 1602, in whichthe NIC 1310 determines whether a notification triggering event has beendetected which indicates to notify a software consumer (e.g., one of thesoftware consumers 1208 of FIG. 12) of the present statistic countervalues of a particular active counter page. As described previously, anotification triggering event may include any detected event whichprompts the statistic counter values associated with an active counterpage to be read. As also described previously, such triggering eventsmay include a timer having expired, a flush request from the subscribingsoftware, the value of a statistic counter having exceeded a thresholdvalue (e.g., based on a number of bits allocated per counter or otherthreshold determining factor), a statistic counter having grown by apredetermined value, or some other notification triggering event.

If the NIC 1310 determines to notify the software consumer, the method1600 advances to block 1604, in which the NIC 1310 marks the activecounter page associated with the software consumer for notification. Inblock 1606, the NIC 1310 allocates a new active counter page to updatefor subsequently received network packets. It should be appreciated thatthe new active counter page includes the same active counter entries asthe active counter page marked for notification such that each counteris reset to the default value. As such, only the number of successfullookups performed between the time the active counter page was markedfor notification and the new active counter page is marked fornotification are accounted for. In block 1608, the NIC 1310 reads thestatistic counter values for each active counter entry in the activecounter page. In block 1610, the NIC 1310 identifies the total number ofactive counter entries read from the active counter page. In block 1612,the NIC 1310 generates a notification message with the read statisticcounter values and their associated statistic counter identifiers as apayload/body of the message. Additionally, in block 1614, the NIC 1310captures the time at which the notification message was generated.

In block 1616, the NIC 1310 attaches a header to the notificationmessage. Additionally, in block 1618, the NIC 1310 includes a timestampin the header which corresponds to the captured time at which thenotification message was generated. Further, in block 1620, the NIC 1310includes a value indicating the identified total number of activecounter entries in the active counter page. In block 1622, the NIC 1310transmits the notification message to a consumer control queueassociated with the software consumer to be notified.

It should be appreciated that, in some embodiments, the methods 1500 and1600 may be embodied as various instructions stored on acomputer-readable media, which may be executed by a processor (e.g., theprocessor 1300), the communication circuitry 1306, and/or othercomponents of the target computing device 1206 to cause the targetcomputing device 1206 to perform at least a portion of the methods 1500and 1600. The computer-readable media may be embodied as any type ofmedia capable of being read by the target computing device 1206including, but not limited to, the memory 1304, the data storage device1314, other memory or data storage devices of the target computingdevice 1206, portable media readable by a peripheral device of thetarget computing device 1206, and/or other media.

EXAMPLES

Illustrative examples of the technologies disclosed herein are providedbelow. An embodiment of the technologies may include any one or more,and any combination of, the examples described below.

Example 1 includes a computing device for managing network statisticcounters, the computing device comprising a compute engine; and anetwork interface controller (NIC) to identify, by the NIC, a statisticcounter of a plurality of statistic counters and a software consumerbased on a received network packet, wherein the software consumer ispresently executing on the computing device; identify, by the NIC, anactive counter page as a function of the identified software consumer,wherein the active counter page includes a plurality of counteridentifier entries, and wherein each of the plurality of counteridentifier entries includes a counter identifier of the statisticcounter and a counter memory address of the statistic counter; read, bythe NIC, a value of the statistic counter stored at the counter memoryaddress of a corresponding counter identifier entry; increment, by theNIC, the read value of the statistic counter; write, by the NIC, theincremented value of the statistic counter back to the counter memoryaddress; determine, by the NIC, whether a notification triggering eventhas been detected; generate, by the NIC and in response to havingdetected the notification triggering event, a notification message,wherein a body of the notification message includes a present value ofthe statistic counter and a present value of each of the other statisticcounters of the active counter page; and transmit, by the NIC, thegenerated notification message to the software consumer.

Example 2 includes the subject matter of Example 1, and wherein totransmit the generated notification message to the software consumercomprises to transmit the generated notification message to a consumercontrol queue associated with the software consumer.

Example 3 includes the subject matter of any of Examples 1 and 2, andwherein to generate the notification message includes to capture a timeat which the notification message was generated and attach a header tothe notification message, and wherein the header includes the capturedtime.

Example 4 includes the subject matter of any of Examples 1-3, andwherein to generate the notification message includes to attach a headerto the notification message, wherein the header includes an indicator ofa total number of statistic counters of the active counter page includedin the notification message.

Example 5 includes the subject matter of any of Examples 1-4, andwherein to determine whether the notification triggering event has beendetected comprises to detect whether a timer managed by the NIC hasexpired.

Example 6 includes the subject matter of any of Examples 1-5, andwherein to determine whether the notification triggering event has beendetected comprises to detect whether a flush request has been receivedfrom the software consumer.

Example 7 includes the subject matter of any of Examples 1-6, andwherein to determine whether the notification triggering event has beendetected comprises to detect whether a value of any of the plurality ofstatistic counters has exceeded a threshold value.

Example 8 includes the subject matter of any of Examples 1-7, andwherein to determine whether the notification triggering event has beendetected comprises to detect whether a value of any of the plurality ofstatistic counters has grown by a predetermined value.

Example 9 includes the subject matter of any of Examples 1-8, andwherein the plurality of instructions further cause the computing deviceto add, by the NIC and in response to the lookup operation not havingreturned a matching counter identifier, a new counter to the activecounter page; allocate, by the NIC, a new statistic counter at a newcounter memory address; set, by the NIC, a value of the new statisticcounter to zero; and write, by the NIC, an identifier of the newstatistic counter and the new counter memory address to an empty counteridentifier entry of the active counter page.

Example 10 includes the subject matter of any of Examples 1-9, andwherein the plurality of instructions further cause the computing deviceto determine, by the NIC, a packet flow associated with the receivednetwork packet, and wherein to identify the statistic counter and thesoftware consumer comprises to identify the statistic counter and thesoftware consumer based on the determined packet flow.

Example 11 includes the subject matter of any of Examples 1-10, andwherein the plurality of instructions further cause the computing deviceto perform, by the NIC, a lookup operation for the identified statisticcounter in the identified active counter page to retrieve a countermemory address associated with the identified statistic counter, andwherein to read the value of the statistic counter stored at the countermemory address of the corresponding counter identifier entry comprisesto read the value of the statistic counter at a matching counteridentifier entry returned by the lookup operation subsequent to thelookup operation having returned the matching counter identifier entry.

Example 12 includes a method for managing network statistic counters,the method comprising identifying, by a network interface controller(NIC) of a computing device, a statistic counter of a plurality ofstatistic counters and a software consumer based on a received networkpacket, wherein the software consumer is presently executing on thecomputing device; identifying, by the NIC, an active counter page as afunction of the identified software consumer, wherein the active counterpage includes a plurality of counter identifier entries, and whereineach of the plurality of counter identifier entries includes a counteridentifier of the statistic counter and a counter memory address of thestatistic counter; reading, by the NIC, a value of the statistic counterstored at the counter memory address of a corresponding counteridentifier entry; incrementing, by the NIC, the read value of thestatistic counter; writing, by the NIC, the incremented value of thestatistic counter back to the counter memory address; determining, bythe NIC, whether a notification triggering event has been detected;generating, by the NIC and in response to having detected thenotification triggering event, a notification message, wherein a body ofthe notification message includes a present value of the statisticcounter and a present value of each of the other statistic counters ofthe active counter page; and transmitting, by the NIC, the generatednotification message to the software consumer.

Example 13 includes the subject matter of Example 12, and whereintransmitting the generated notification message to the software consumercomprises transmitting the generated notification message to a consumercontrol queue associated with the software consumer.

Example 14 includes the subject matter of any of Examples 12 and 13, andwherein generating the notification message includes capturing a time atwhich the notification message was generated and attach a header to thenotification message, and wherein the header includes the captured time.

Example 15 includes the subject matter of any of Examples 12-14, andwherein generating the notification message includes attaching a headerto the notification message, and wherein the header includes anindicator of a total number of statistic counters of the active counterpage included in the notification message.

Example 16 includes the subject matter of any of Examples 12-15, andwherein determining whether the notification triggering event has beendetected comprises detecting whether a timer managed by the NIC hasexpired.

Example 17 includes the subject matter of any of Examples 12-16, andwherein determining whether the notification triggering event has beendetected comprises detecting whether a flush request has been receivedfrom the software consumer.

Example 18 includes the subject matter of any of Examples 12-17, andwherein determining whether the notification triggering event has beendetected comprises detecting whether a value of any of the plurality ofstatistic counters has exceeded a threshold value.

Example 19 includes the subject matter of any of Examples 12-18, andwherein determining whether the notification triggering event has beendetected comprises detecting whether a value of any of the plurality ofstatistic counters has grown by a predetermined value.

Example 20 includes the subject matter of any of Examples 12-19, andfurther including adding, by the NIC and in response to the lookupoperation not having returned a matching counter identifier, a newcounter to the active counter page; allocating, by the NIC, a newstatistic counter at a new counter memory address; setting, by the NIC,a value of the new statistic counter to zero; and writing, by the NIC,an identifier of the new statistic counter and the new counter memoryaddress to an empty counter identifier entry of the active counter page.

Example 21 includes the subject matter of any of Examples 12-20, andfurther including determining, by the NIC, a packet flow associated withthe received network packet, and wherein identifying the statisticcounter and the software consumer comprises identifying the statisticcounter and the software consumer based on the determined packet flow.

Example 22 includes the subject matter of any of Examples 12-21, andfurther including performing, by the NIC, a lookup operation for theidentified statistic counter in the identified active counter page toretrieve a counter memory address associated with the identifiedstatistic counter, and wherein reading the value of the statisticcounter stored at the counter memory address of the correspondingcounter identifier entry comprises reading the value of the statisticcounter at a matching counter identifier entry returned by the lookupoperation subsequent to the lookup operation having returned thematching counter identifier entry.

Example 23 includes one or more machine-readable storage media of anetwork interface controller (NIC) of a computing device comprising aplurality of instructions stored thereon that, when executed, cause theNIC of to perform the method of any of Examples 12-22.

Example 24 includes a computing device for managing network statisticcounters, the computing device comprising one or more processors; and anetwork interface controller (NIC) having stored therein a plurality ofinstructions that, when executed by the NIC, cause the computing deviceto perform the method of any of Examples 12-22.

Example 25 includes a computing device for managing network statisticcounters, the computing device comprising means for identifying, by anetwork interface controller (NIC) of a computing device, a statisticcounter of a plurality of statistic counters and a software consumerbased on a received network packet, wherein the software consumer ispresently executing on the computing device; means for identifying, bythe NIC, an active counter page as a function of the identified softwareconsumer, wherein the active counter page includes a plurality ofcounter identifier entries, and wherein each of the plurality of counteridentifier entries includes a counter identifier of the statisticcounter and a counter memory address of the statistic counter; means forreading, by the NIC, a value of the statistic counter stored at thecounter memory address of a corresponding counter identifier entry;means for incrementing, by the NIC, the read value of the statisticcounter; means for writing, by the NIC, the incremented value of thestatistic counter back to the counter memory address; means fordetermining, by the NIC, whether a notification triggering event hasbeen detected; means for generating, by the NIC and in response tohaving detected the notification triggering event, a notificationmessage, wherein a body of the notification message includes a presentvalue of the statistic counter and a present value of each of the otherstatistic counters of the active counter page; and means fortransmitting, by the NIC, the generated notification message to thesoftware consumer.

Example 26 includes the subject matter of Example 25, and wherein themeans for transmitting the generated notification message to thesoftware consumer comprises means for transmitting the generatednotification message to a consumer control queue associated with thesoftware consumer.

Example 27 includes the subject matter of any of Examples 25 and 26, andwherein the means for generating the notification message includes meansfor capturing a time at which the notification message was generated andattach a header to the notification message, and wherein the headerincludes the captured time.

Example 28 includes the subject matter of any of Examples 25-27, andwherein the means for generating the notification message includes meansfor attaching a header to the notification message, and wherein theheader includes an indicator of a total number of statistic counters ofthe active counter page included in the notification message.

Example 29 includes the subject matter of any of Examples 25-28, andwherein the means for determining whether the notification triggeringevent has been detected comprises means for detecting whether a timermanaged by the NIC has expired.

Example 30 includes the subject matter of any of Examples 25-29, andwherein the means for determining whether the notification triggeringevent has been detected comprises means for detecting whether a flushrequest has been received from the software consumer.

Example 31 includes the subject matter of any of Examples 25-30, andwherein the means for determining whether the notification triggeringevent has been detected comprises means for detecting whether a value ofany of the plurality of statistic counters has exceeded a thresholdvalue.

Example 32 includes the subject matter of any of Examples 25-31, andwherein the means for determining whether the notification triggeringevent has been detected comprises means for detecting whether a value ofany of the plurality of statistic counters has grown by a predeterminedvalue.

Example 33 includes the subject matter of any of Examples 25-32, andfurther including means for adding, by the NIC and in response to thelookup operation not having returned a matching counter identifier, anew counter to the active counter page; means for allocating, by theNIC, a new statistic counter at a new counter memory address; means forsetting, by the NIC, a value of the new statistic counter to zero; andmeans for writing, by the NIC, an identifier of the new statisticcounter and the new counter memory address to an empty counteridentifier entry of the active counter page.

Example 34 includes the subject matter of any of Examples 25-33, andfurther including means for determining, by the NIC, a packet flowassociated with the received network packet, and wherein the means foridentifying the statistic counter and the software consumer comprisesidentifying the statistic counter and the software consumer based on thedetermined packet flow.

Example 35 includes the subject matter of any of Examples 25-34, andfurther including means for performing, by the NIC, a lookup operationfor the identified statistic counter in the identified active counterpage to retrieve a counter memory address associated with the identifiedstatistic counter, and wherein the means for reading the value of thestatistic counter stored at the counter memory address of thecorresponding counter identifier entry comprises reading the value ofthe statistic counter at a matching counter identifier entry returned bythe lookup operation subsequent to the lookup operation having returnedthe matching counter identifier entry.

The invention claimed is:
 1. A computing device for managing networkstatistic counters, the computing device comprising: a hardware computeengine; and a network interface controller (NIC) to: identify, by theNIC, a statistic counter of a plurality of statistic counters and asoftware consumer based on a received network packet, wherein thesoftware consumer is presently executing on the computing device;identify, by the NIC, an active counter page as a function of theidentified software consumer, wherein the active counter page includes aplurality of counter identifier entries, and wherein each of theplurality of counter identifier entries includes a counter identifier ofthe statistic counter and a counter memory address of the statisticcounter; read, by the NIC, a value of the statistic counter stored atthe counter memory address of a corresponding counter identifier entry;increment, by the NIC, the read value of the statistic counter; write,by the NIC, the incremented value of the statistic counter back to thecounter memory address; determine, by the NIC, whether a notificationtriggering event has been detected; generate, by the NIC and in responseto having detected the notification triggering event, a notificationmessage, wherein a body of the notification message includes a presentvalue of the statistic counter and a present value of each of the otherstatistic counters of the active counter page; and transmit, by the NIC,the generated notification message to the software consumer.
 2. Thecomputing device of claim 1, wherein to transmit the generatednotification message to the software consumer comprises to transmit thegenerated notification message to a consumer control queue associatedwith the software consumer.
 3. The computing device of claim 1, whereinto generate the notification message includes to capture a time at whichthe notification message was generated and attach a header to thenotification message, and wherein the header includes the captured time.4. The computing device of claim 3, wherein to generate the notificationmessage includes to attach a header to the notification message, whereinthe header includes an indicator of a total number of statistic countersof the active counter page included in the notification message.
 5. Thecomputing device of claim 1, wherein to determine whether thenotification triggering event has been detected comprises to detectwhether a timer managed by the NIC has expired.
 6. The computing deviceof claim 1, wherein to determine whether the notification triggeringevent has been detected comprises to detect whether a flush request hasbeen received from the software consumer.
 7. The computing device ofclaim 1, wherein to determine whether the notification triggering eventhas been detected comprises to detect whether a value of any of theplurality of statistic counters has exceeded a threshold value.
 8. Thecomputing device of claim 1, wherein to determine whether thenotification triggering event has been detected comprises to detectwhether a value of any of the plurality of statistic counters has grownby a predetermined value.
 9. The computing device of claim 1, whereinthe plurality of instructions further cause the computing device to:add, by the NIC and in response to the lookup operation not havingreturned a matching counter identifier, a new counter to the activecounter page; allocate, by the NIC, a new statistic counter at a newcounter memory address; set, by the NIC, a value of the new statisticcounter to zero; and write, by the NIC, an identifier of the newstatistic counter and the new counter memory address to an empty counteridentifier entry of the active counter page.
 10. The computing device ofclaim 1, wherein the plurality of instructions further cause thecomputing device to determine, by the NIC, a packet flow associated withthe received network packet, and wherein to identify the statisticcounter and the software consumer comprises to identify the statisticcounter and the software consumer based on the determined packet flow.11. The computing device of claim 1, wherein the plurality ofinstructions further cause the computing device to perform, by the NIC,a lookup operation for the identified statistic counter in theidentified active counter page to retrieve a counter memory addressassociated with the identified statistic counter, and wherein to readthe value of the statistic counter stored at the counter memory addressof the corresponding counter identifier entry comprises to read thevalue of the statistic counter at a matching counter identifier entryreturned by the lookup operation subsequent to the lookup operationhaving returned the matching counter identifier entry.
 12. One or morenon-transitory machine-readable storage media comprising a plurality ofinstructions stored thereon that, in response to being executed, cause acomputing device to: identify, by a network interface controller (NIC)of the computing device, a statistic counter of a plurality of statisticcounters and a software consumer based on a received network packet,wherein the software consumer is presently executing on the computingdevice; identify, by the NIC, an active counter page as a function ofthe identified software consumer, wherein the active counter pageincludes a plurality of counter identifier entries, and wherein each ofthe plurality of counter identifier entries includes a counteridentifier of the statistic counter and a counter memory address of thestatistic counter; read, by the NIC, a value of the statistic counterstored at the counter memory address of a corresponding counteridentifier entry; increment, by the NIC, the read value of the statisticcounter; write, by the NIC, the incremented value of the statisticcounter back to the counter memory address; determine, by the NIC,whether a notification triggering event has been detected; generate, bythe NIC and in response to having detected the notification triggeringevent, a notification message, wherein a body of the notificationmessage includes a present value of the statistic counter and a presentvalue of each of the other statistic counters of the active counterpage; and transmit, by the NIC, the generated notification message tothe software consumer.
 13. The one or more non-transitorymachine-readable storage media of claim 12, wherein to transmit thegenerated notification message to the software consumer comprises totransmit the generated notification message to a consumer control queueassociated with the software consumer.
 14. The one or morenon-transitory machine-readable storage media of claim 12, wherein togenerate the notification message includes to capture a time at whichthe notification message was generated and attach a header to thenotification message, and wherein the header includes the captured time.15. The one or more non-transitory machine-readable storage media ofclaim 14, wherein to generate the notification message includes toattach a header to the notification message, wherein the header includesan indicator of a total number of statistic counters of the activecounter page included in the notification message.
 16. The one or morenon-transitory machine-readable storage media of claim 12, wherein todetermine whether the notification triggering event has been detectedcomprises to detect whether a timer managed by the NIC has expired. 17.The one or more non-transitory machine-readable storage media of claim12, wherein to determine whether the notification triggering event hasbeen detected comprises to detect whether a flush request has beenreceived from the software consumer.
 18. The one or more non-transitorymachine-readable storage media of claim 12, wherein to determine whetherthe notification triggering event has been detected comprises to detectwhether a value of any of the plurality of statistic counters has one ofexceeded a threshold value or grown by a predetermined value.
 19. Theone or more non-transitory machine-readable storage media of claim 12,wherein the plurality of instructions further cause the computing deviceto: add, by the NIC and in response to the lookup operation not havingreturned a matching counter identifier, a new counter to the activecounter page; allocate, by the NIC, a new statistic counter at a newcounter memory address; set, by the NIC, a value of the new statisticcounter to zero; and write, by the NIC, an identifier of the newstatistic counter and the new counter memory address to an empty counteridentifier entry of the active counter page.
 20. The one or morenon-transitory machine-readable storage media of claim 12, wherein theplurality of instructions further cause the computing device todetermine, by the NIC, a packet flow associated with the receivednetwork packet, and wherein to identify the statistic counter and thesoftware consumer comprises to identify the statistic counter and thesoftware consumer based on the determined packet flow.
 21. The one ormore non-transitory machine-readable storage media of claim 12, whereinthe plurality of instructions further cause the computing device toperform, by the NIC, a lookup operation for the identified statisticcounter in the identified active counter page to retrieve a countermemory address associated with the identified statistic counter, andwherein to read the value of the statistic counter stored at the countermemory address of the corresponding counter identifier entry comprisesto read the value of the statistic counter at a matching counteridentifier entry returned by the lookup operation subsequent to thelookup operation having returned the matching counter identifier entry.22. A method for managing network statistic counters, the methodcomprising: identifying, by a network interface controller (NIC) of acomputing device, a statistic counter of a plurality of statisticcounters and a software consumer based on a received network packet,wherein the software consumer is presently executing on the computingdevice; identifying, by the NIC, an active counter page as a function ofthe identified software consumer, wherein the active counter pageincludes a plurality of counter identifier entries, and wherein each ofthe plurality of counter identifier entries includes a counteridentifier of the statistic counter and a counter memory address of thestatistic counter; reading, by the NIC, a value of the statistic counterstored at the counter memory address of a corresponding counteridentifier entry; incrementing, by the NIC, the read value of thestatistic counter; writing, by the NIC, the incremented value of thestatistic counter back to the counter memory address; determining, bythe NIC, whether a notification triggering event has been detected;generating, by the NIC and in response to having detected thenotification triggering event, a notification message, wherein a body ofthe notification message includes a present value of the statisticcounter and a present value of each of the other statistic counters ofthe active counter page; and transmitting, by the NIC, the generatednotification message to the software consumer.
 23. The method of claim22, further comprising: adding, by the NIC and in response to the lookupoperation not having returned a matching counter identifier, a newcounter to the active counter page; allocating, by the NIC, a newstatistic counter at a new counter memory address; setting, by the NIC,a value of the new statistic counter to zero; and writing, by the NIC,an identifier of the new statistic counter and the new counter memoryaddress to an empty counter identifier entry of the active counter page.24. The method of claim 22, further comprising determining, by the NIC,a packet flow associated with the received network packet, and whereinidentifying the statistic counter and the software consumer comprisesidentifying the statistic counter and the software consumer based on thedetermined packet flow.
 25. The method of claim 22, further comprisingperforming, by the NIC, a lookup operation for the identified statisticcounter in the identified active counter page to retrieve a countermemory address associated with the identified statistic counter, andwherein reading the value of the statistic counter stored at the countermemory address of the corresponding counter identifier entry comprisesreading the value of the statistic counter at a matching counteridentifier entry returned by the lookup operation subsequent to thelookup operation having returned the matching counter identifier entry.